﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using System.Globalization;

namespace QLVatTu.NghiepVu
{
    public partial class frmThemPhieuChuyen : Form
    {

        KetNoiDB cn = new KetNoiDB();
        public string MaPhieuChuyen = "";

        public frmThemPhieuChuyen()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbKhoNhap.DataSource = cn.getTable("select * from tbl_Kho");
            cbbKhoNhap.DisplayMember = "TenKho";
            cbbKhoNhap.ValueMember = "MaKho";

            cbbKhoXuat.DataSource = cn.getTable("select * from tbl_Kho");
            cbbKhoXuat.DisplayMember = "TenKho";
            cbbKhoXuat.ValueMember = "MaKho";

            cbbLoaiPhieu.DataSource = cn.getTable("select * from tbl_LoaiPhieu where MaLoaiPhieu='LP004'");
            cbbLoaiPhieu.DisplayMember = "TenLoaiPhieu";
            cbbLoaiPhieu.ValueMember = "MaLoaiPhieu";

            VatTu.DataSource = cn.getTable("select *from tbl_VatTu");
            VatTu.DisplayMember = "TenVatTu";
            VatTu.ValueMember = "MaVatTu";

            cbbXacNhan.SelectedIndex = 0;

            if (MaPhieuChuyen == "")
            {
                //Thêm
                txtSoPhieu.Text = cn.SinhMa("MaChuyenKho", "tbl_ChuyenKho", "PC");
            }
            else
            {
                //Sửa
                btnThem.Enabled = true;

                string sql = @"select * from tbl_ChuyenKho where MaChuyenKho='" + MaPhieuChuyen + "'";
                DataTable tbl = cn.getTable(sql);
                if (tbl.Rows.Count > 0)
                {
                    txtSoPhieu.Text=tbl.Rows[0]["MaChuyenKho"].ToString();
                    cbbKhoXuat.SelectedValue=tbl.Rows[0]["TuKho"].ToString();
                    cbbKhoNhap.SelectedValue=tbl.Rows[0]["DenKho"].ToString();
                    txtNhanVien.Text=tbl.Rows[0]["NguoiChuyen"].ToString();
                    dtpNgayLap.Value=DateTime.Parse(tbl.Rows[0]["NgayChuyen"].ToString());
                    txtDienGiai.Text=tbl.Rows[0]["DienGiai"].ToString();
                    bool _XacNhan = bool.Parse(tbl.Rows[0]["XacNhan"].ToString());
                    if (_XacNhan == true)
                    {
                        cbbXacNhan.SelectedIndex = 1;
                    }
                    else
                    {
                        cbbXacNhan.SelectedIndex = 0;
                    }
                }

                sql = @"SELECT     dbo.tbl_ChiTietChuyenKho.MaVatTu, dbo.tbl_DonViTinh.TenDonViTinh, dbo.tbl_ChiTietChuyenKho.SoLuong, dbo.tbl_ChiTietChuyenKho.SoLuongTon
                        FROM         dbo.tbl_DonViTinh INNER JOIN
                                              dbo.tbl_ChiTietChuyenKho ON dbo.tbl_DonViTinh.MaDonViTinh = dbo.tbl_ChiTietChuyenKho.MaDonViTinh
                        WHERE     dbo.tbl_ChiTietChuyenKho.MaChuyenKho = '" + MaPhieuChuyen + "'";
                DataTable dataChiTiet = cn.getTable(sql);
                if (dataChiTiet.Rows.Count > 0)
                {
                    dtgChiTiet.Rows.Clear();
                    foreach (DataRow dr in dataChiTiet.Rows)
                    {
                        DataGridViewRow dgvr = (DataGridViewRow)dtgChiTiet.Rows[0].Clone();
                        dgvr.Cells[1].Value = dr["MaVatTu"].ToString();
                        dgvr.Cells[2].Value=dr["TenDonViTinh"].ToString();

                        sql = @"
                                SELECT     SUM(SoLuong) as SoLuongTonKho
                                FROM         dbo.tbl_LuuKho
                                WHERE MaKho = '" + cbbKhoXuat.SelectedValue + "' AND MaVatTu = '" + dr["MaVatTu"].ToString() + "'";
                        string strSoLuong = cn.LayDuLieu(sql);
                        float SoLuong = 0;
                        if (strSoLuong != null && strSoLuong != "" && float.Parse(strSoLuong) > 0) SoLuong = float.Parse(strSoLuong);
                        dgvr.Cells[3].Value = SoLuong;

                        dgvr.Cells[4].Value = dr["SoLuong"].ToString();
                        dtgChiTiet.Rows.Add(dgvr);
                    }
                }
            }
        }

        private void frmThemPhieuChuyen_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
        }

        private void cbbKhoXuat_SelectedValueChanged(object sender, EventArgs e)
        {
            
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        bool IsValid()
        {
            bool kt = true;
            string ktKhoChuyen=cbbKhoXuat.SelectedIndex.ToString();
            string ktKhoDen=cbbKhoNhap.SelectedIndex.ToString();

            if (txtNhanVien.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên nhân viên lập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNhanVien.Focus();
                kt = false;
            }

           else if (ktKhoChuyen == ktKhoDen)
            {
                MessageBox.Show("Kho nhập phải khác kho chuyển", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbKhoNhap.Focus();
                kt = false;
            }

           else if (cbbXacNhan.Text == "")
            {
                MessageBox.Show("Bạn chưa chọn xác nhận.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbXacNhan.Focus();
                kt = false;
            }
            else
            {
               string sql = "select MIN(NgayNhap) from tbl_PhieuNhapKho where XacNhan=1";
                DateTime dtNgayNhapNhoNhat = DateTime.Parse(cn.LayDuLieu(sql));

                if (dtpNgayLap.Value > DateTime.Now || dtpNgayLap.Value < dtNgayNhapNhoNhat)
                {
                    MessageBox.Show("Ngày lập phiếu không hợp lý", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    dtpNgayLap.Focus();
                    kt = false;
                }
            }

            foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
            {
                string strMaVatTu = "";

                if (dgvr.IsNewRow) continue;
                if (kiem_tra_lap_vat_tu(dgvr.Index) == false)
                {
                    kt = false;
                }

                if (dgvr.Cells["VatTu"].Value == null)
                {
                    dgvr.Cells["VatTu"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["VatTu"].ColumnIndex].HeaderText + " chưa nhập ";
                    kt = false;
                }
                else
                {
                    dgvr.Cells["VatTu"].ErrorText = "";
                    strMaVatTu = dgvr.Cells["VatTu"].Value.ToString();
                    if (dgvr.Cells["DonViTinh"].Value == null)
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["DonViTinh"].ColumnIndex].HeaderText + " chưa nhập ";
                        kt = false;
                    }
                    else
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "";
                    }
                }
                if (dgvr.Cells["SoLuong"].Value == null)
                {
                    dgvr.Cells["SoLuong"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["SoLuong"].ColumnIndex].HeaderText + " chưa nhập";
                    kt = false;
                }
                else
                {
                    dgvr.Cells["SoLuong"].ErrorText = "";
                    string strSoLuongChuyen = "";
                    float SoLuongChuyen = 0;
                    if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                    {
                        strSoLuongChuyen = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongChuyen = dgvr.Cells["SoLuong"].Value.ToString();
                    }

                    float.TryParse(strSoLuongChuyen, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongChuyen);

                    float SoLuongTon = float.Parse(dgvr.Cells["colSoLuongTon"].Value.ToString());

                    if (SoLuongChuyen <= 0)
                    {
                        dgvr.Cells["SoLuong"].ErrorText="Lỗi: "+dtgChiTiet.Columns[dgvr.Cells["SoLuong"].ColumnIndex].HeaderText+" không hợp lý";
                        kt=false;
                    }
                    else
                    {
                        dgvr.Cells["SoLuong"].ErrorText="";
                        if (SoLuongChuyen > SoLuongTon)
                        {
                            dgvr.Cells["SoLuong"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["SoLuong"].ColumnIndex].HeaderText + " không được lớn hơn số lượng tồn kho";
                            kt = false;
                        }
                        else
                        {
                            dgvr.Cells["SoLuong"].ErrorText = "";
                        }
                    }
                }
            }
            return kt;
        }

        private bool kiem_tra_lap_vat_tu(int rowIndex)
        {
            foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
            {
                if (dgvr.IsNewRow) continue;

                if (dgvr.Index != rowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTiet.Rows[rowIndex].Cells[1].Value.ToString())
                {
                    dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                    dtgChiTiet.Rows[rowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                    return false;
                }
                else
                {
                    dgvr.Cells[1].ErrorText = "";
                    dtgChiTiet.Rows[rowIndex].Cells[1].ErrorText = "";
                }
            }
            return true;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                string MaChuyenKho = txtSoPhieu.Text;
                string TuKho = cbbKhoXuat.SelectedValue.ToString();
                string DenKho = cbbKhoNhap.SelectedValue.ToString();
                string NguoiChuyen = txtNhanVien.Text;
                string NgayChuyen = dtpNgayLap.Value.ToString("yyyy-MM-dd");
                string DienGiai = txtDienGiai.Text;
                string MaLoaiPhieu = cbbLoaiPhieu.SelectedValue.ToString();
                byte XacNhan = 0;
                if (cbbXacNhan.Text == "Đã xác nhận")
                {
                    XacNhan = 1;
                }

                string MaDonViTinh = "";
                string strSoLuong = "";
                double SoLuong = 0;

                string sql = "";

                if (MaPhieuChuyen == "")
                {
                    //Thêm phiếu chuyển kho
                    cn.Insert_Table("tbl_ChuyenKho", "MaChuyenKho,TuKho,DenKho,NguoiChuyen,NgayChuyen,DienGiai,MaLoaiPhieu,XacNhan", "'" + MaChuyenKho + "','" + TuKho + "','" + DenKho + "',N'" + NguoiChuyen + "','" + NgayChuyen + "',N'" + DienGiai + "','"+MaLoaiPhieu+"','"+XacNhan+"'");

                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='" + dgvr.Cells["VatTu"].Value.ToString() + "'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        //Thêm phiếu chi tiết chuyển kho
                        cn.Insert_Table("tbl_ChiTietChuyenKho", "MaChuyenKho,MaVatTu,MaDonViTinh,SoLuong,SoLuongTon", "'" + MaChuyenKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinh + "','" + SoLuong.ToString().Replace(",",".") + "','"+dgvr.Cells["colSoLuongTon"].Value.ToString()+"'");

                        if (XacNhan == 1)
                        {
                            double SoLuongChuyen = -SoLuong;
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + MaChuyenKho + "','" + TuKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + SoLuongChuyen.ToString().Replace(",",".") + "',0,'" + dtpNgayLap.Value.ToString() + "'");
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + MaChuyenKho + "','" + DenKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + SoLuong.ToString().Replace(",",".") + "',0,'" + dtpNgayLap.Value.ToString() + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Thêm phiếu chuyển kho.");
                    MessageBox.Show("Cập nhật thành công");
                }
                else
                {
                    //Update bảng chuyển kho
                    cn.Update_Table("tbl_ChuyenKho", "DenKho='" + DenKho + "',NguoiChuyen='" + NguoiChuyen + "',NgayChuyen='" + NgayChuyen + "',DienGiai='" + DienGiai + "',MaLoaiPhieu='"+MaLoaiPhieu+"'", "MaChuyenKho='" + MaChuyenKho + "'");

                    //xóa chi tiết chuyển cũ
                    cn.Delete_Table("tbl_ChiTietChuyenKho","MaChuyenKho='"+MaChuyenKho+"'");

                    //xóa phiếu chuyển cũ trong bảng lưu kho
                    cn.Delete_Table("tbl_LuuKho","SoPhieu='"+MaChuyenKho+"'");

                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;
                        if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='" + dgvr.Cells["VatTu"].Value.ToString() + "'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        cn.Insert_Table("tbl_ChiTietChuyenKho", "MaChuyenKho,MaVatTu,MaDonViTinh,SoLuong,SoLuongTon", "'" + MaChuyenKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinh + "','" + SoLuong.ToString().Replace(",", ".") + "','" + dgvr.Cells["colSoLuongTon"].Value.ToString() + "'");

                        if (XacNhan == 1)
                        {
                            //cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,MaDonViTinhGoc,SoLuong,SoLuongPhePham,NgayCapNhat,MaDonViTinh,SoLuongTheoDonViTinh", "'" + MaChuyenKho + "','" + TuKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinhGoc + "','" + -SoLuongTheoDonViTinhGoc + "',0,'" + dtpNgayLap.Value.ToString() + "','" + dgvr.Cells["DonViTinh"].Value.ToString() + "','" + -SoLuong + "'");
                            //cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,MaDonViTinhGoc,SoLuong,SoLuongPhePham,NgayCapNhat,MaDonViTinh,SoLuongTheoDonViTinh", "'" + MaChuyenKho + "','" + DenKho + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinhGoc + "','" + SoLuongTheoDonViTinhGoc + "',0,'" + dtpNgayLap.Value.ToString() + "','" + dgvr.Cells["DonViTinh"].Value.ToString() + "','" + SoLuong + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Sửa phiếu chuyển kho.");
                }
                this.Close();
            }
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (dtgChiTiet.RowCount == 0) return;
            else
            {
                DialogResult msg = MessageBox.Show("Bạn có chắc muốn nhập lại dữ liệu", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (msg == DialogResult.Yes)
                {
                    dtgChiTiet.Rows.Clear();
                }
            }
        }

        private void dtgChiTiet_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgChiTiet.RowCount > 0 && e.RowIndex != -1)
            {
                btnThem.Enabled = true;
                string sql = "";

                if (e.ColumnIndex == 1 && dtgChiTiet.Rows[e.RowIndex].Cells[1].Value != null)
                {
                    sql = @"SELECT     dbo.tbl_DonViTinh.TenDonViTinh
                            FROM         dbo.tbl_DonViTinh INNER JOIN
                                                  dbo.tbl_VatTu ON dbo.tbl_DonViTinh.MaDonViTinh = dbo.tbl_VatTu.MaDonViTinh
                            WHERE     dbo.tbl_VatTu.MaVatTu ='" + dtgChiTiet.Rows[e.RowIndex].Cells[1].Value.ToString() + "'";
                    DataGridViewTextBoxCell TenDonViTinh = (DataGridViewTextBoxCell)dtgChiTiet.Rows[e.RowIndex].Cells[2];
                    TenDonViTinh.Value = cn.LayDuLieu(sql);

                    sql = "select sum(SoLuong) as SoLuonTonKho from tbl_LuuKho where MaKho='" + cbbKhoXuat.SelectedValue.ToString() + "' and MaVatTu='" + dtgChiTiet.Rows[e.RowIndex].Cells[1].Value.ToString() + "'";
                    string strSoLuongTonKho = cn.LayDuLieu(sql);
                    float SoLuongTonKho = 0;

                    if (strSoLuongTonKho != null && strSoLuongTonKho != "" && float.Parse(strSoLuongTonKho) > 0) SoLuongTonKho = float.Parse(strSoLuongTonKho);
                    DataGridViewTextBoxCell txtSoLuongTonKho = (DataGridViewTextBoxCell)dtgChiTiet.Rows[e.RowIndex].Cells[3];
                    txtSoLuongTonKho.Value = null;
                    txtSoLuongTonKho.Value = SoLuongTonKho;

                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Index != e.RowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTiet.Rows[e.RowIndex].Cells[1].Value.ToString())
                        {
                            dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                            dtgChiTiet.Rows[e.RowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                        }
                        else
                        {
                            dgvr.Cells[1].ErrorText = "";
                            dtgChiTiet.Rows[e.RowIndex].Cells[1].ErrorText = "";
                        }
                    }
                }
            }
            else
            {
                btnThem.Enabled = false;
            }
        }

        private void btnXoaChon_Click(object sender, EventArgs e)
        {
            for (int i = dtgChiTiet.Rows.Count - 1; i >= 0; i--)
            {
                if (dtgChiTiet.Rows[i].Cells[0].Value != null)
                {
                    if (bool.Parse(dtgChiTiet.Rows[i].Cells[0].Value.ToString()) == true) dtgChiTiet.Rows.RemoveAt(i);
                }
            }
        }

        private void cbbKhoXuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbKhoXuat.SelectedValue != null)
            {
                string sql = "";
                foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                {
                    if (dgvr.IsNewRow) continue;
                    if (dgvr.Cells[1].Value != null && dgvr.Cells[2].Value != null)
                    {
                        sql = @"
                            SELECT     SUM(SoLuong) as SoLuongTonKho
                            FROM         dbo.tbl_LuuKho
                            WHERE MaKho = '" + cbbKhoXuat.SelectedValue + "' AND MaVatTu = '" + dgvr.Cells[1].Value.ToString() + "'";
                        string strSoLuong = cn.LayDuLieu(sql);
                        float SoLuongTonKho = 0;
                        if (strSoLuong != null && strSoLuong != "" && float.Parse(strSoLuong) > 0) SoLuongTonKho = float.Parse(strSoLuong);
                        dgvr.Cells[3].Value = SoLuongTonKho;
                    }
                }
            }
        }
    }
}
